package com.common.utils.beans;

import java.io.Serializable;
import java.util.List;

import com.common.base.persistence.Page;
import com.common.utils.StringUtils;
import com.common.web.resp.vo.ResponseInfo;

/**
 * PCL响应数据
 * @author lj
 * @date 2017年6月8日 下午3:23:20
 */
public class PCLResponseInfo implements Serializable{
	
	public static final String SUCCESS_CODE="0000";

	private static final long serialVersionUID = 7384779126506597265L;

	private Object data;
	
	private List<?> list;
	
	private PCLResponseMeta meta;

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}

	public PCLResponseMeta getMeta() {
		return meta;
	}

	public void setMeta(PCLResponseMeta meta) {
		this.meta = meta;
	}

	/**
	 * 将PCLResponseInfo转成本地的ResponseInfo
	 * @return
	 * @author lj
	 * @date 2017年6月21日 下午2:57:55
	 */
	public ResponseInfo toResponseInfo() {
		ResponseInfo ri = new ResponseInfo();
		ri.setInfo(this.data);
		ri.setMessage(this.meta.getMessage());
		if (!StringUtils.equals(this.meta.getCode(), SUCCESS_CODE)) {
			ri.setSuccess(false);
		}
		return ri;
	}
	
	/**
	 * 将PCLResponseInfo转成本地的ResponseInfo
	 * @parma page
	 * @return
	 * @author lj
	 * @date 2017年6月21日 下午2:57:55
	 */
	@SuppressWarnings("unchecked")
	public <T> ResponseInfo toResponseInfo(Page<T> page) {
		List<T> mList = (List<T>) this.data;
		page.setList(mList);
		if (mList.size() != page.getCount()) {
			page.setCount(mList.size());
		}
		ResponseInfo ri = new ResponseInfo(page);
		ri.setMessage(this.meta.getMessage());
		if (!StringUtils.equals(this.meta.getCode(), SUCCESS_CODE)) {
			ri.setSuccess(false);
		}
		return ri;
	}
	
	/**
	 * 返回本地的json
	 * @return
	 * @author lj
	 * @date 2017年6月21日 下午3:26:42
	 */
	public String toResponseInfoJson() {
		return this.toResponseInfo().toJson();
	}
	/**
	 * 返回本地的json
	 * @param page
	 * @return
	 * @author lj
	 * @date 2017年6月22日 上午10:12:29
	 */
	public <T> String toResponseInfoJson(Page<T> page) {
		return this.toResponseInfo(page).toJson();
	}
	@Override
	public String toString() {
		return "PCLResponseInfo [data=" + data + ", list=" + list + ", meta="
				+ meta + "]";
	}
	
}
